//
//  UpdateList.swift
//  DesignCode
//
//  Created by Json on 2020/4/11.
//  Copyright © 2020 Json. All rights reserved.
//

import SwiftUI

struct UpdateList: View {
    var updates = updateDate
    @State var showNav = false
    @ObservedObject var store = UpdateStore(updates: updateDate)
    
    func addUpdate() {
        store.updates.append(Update(image: "Certificate1", title: "New Title", text: "New Text", date: "Jul 1"))
    }
    
    func move(from source: IndexSet, to destination: Int) {
        // "not use swap!!! crash!!!"
        store.updates.move(fromOffsets: source, toOffset: destination)
    }
    
    var body: some View {
        NavigationView {
            VStack { 
                
                //list是为了设置导航列表
                List{
                    ForEach(store.updates) { item in
                        NavigationLink(destination: UpdateDetail(title: item.title, text: item.text, image: item.image)) {
                            HStack(spacing: 12.0) {
                                Image(item.image)
                                    .resizable() //可调整大小
                                    .aspectRatio(contentMode: .fit) //长宽比适配
                                    .frame(width: 80, height: 80)
                                    .background(Color("background"))
                                    .cornerRadius(30)
                                
                                VStack(alignment: .leading) {
                                    Text(item.title)
                                        .font(.headline)
                                    Text(item.text)
                                        .lineLimit(2)
                                        .frame(height: 50.0)
                                        .lineSpacing(4)
                                        .font(.subheadline)
                                        .font(.subheadline)
                                    Text(item.date)
                                        .font(.caption)
                                        .fontWeight(.bold)
                                        .foregroundColor(Color.gray)
                                }
                            }
                        }
                        .padding(.vertical)
                    }
                    .onDelete { index in
                        self.store.updates.remove(at: index.first!)
                    }
                    .onMove(perform: move)
                }
                .navigationBarTitle("Updates")
                .navigationBarItems(
                    leading: Button(action: addUpdate){
                        Image(systemName: "plus")},
                    trailing: EditButton()
                )
            }
        }
    }
}

struct UpdateList_Previews: PreviewProvider {
    static var previews: some View {
        UpdateList()
    }
}

struct Update: Identifiable {
    var id = UUID()
    var image: String
    var title: String
    var text: String
    var date: String
}

let updateDate = [
    Update(image: "Illustration1", title: "iOS", text: "在被称为iPhone OS之前，iOS是一个由苹果公司开发的移动操作系统，它的第一个版本是在2007年，其中包括iPhone和iPod Touch。在2010年4月发布的iPad（第一代），并在2012年11月发布了iPad mini", date: "JUN 01"),
    Update(image: "Illustration2", title: "Git", text: "Git 是分布式版本控制和源代码管理系统，重点使用和管理代码的速度。 Git 最初是由Linus Torvalds设计开发的，用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件", date: "JUN 05"),
    Update(image: "Illustration3", title: "Swift 4", text: "Swift 4是Apple Inc为iOS和OS X开发开发的一种新编程语言。 Swift 4采用了C语言和Objective-C中最好的特性，没有C语言兼容性的限制。 Swift 4使用与Mac OS和iOS上现有Obj-C系统相同的运行时环境，这使得Swift 4程序可以在许多现有的iOS 6和OS X 10.8平台上运行", date: "JUN 11"),
    Update(image: "Illustration4", title: "Objective-C", text: "Objective-C是一种通用的，面向对象的编程语言，它将Smalltalk样式的消息传递添加到C编程语言中。它是苹果公司用于OS X和iOS操作系统及其API（Cocoa和Cocoa Touch）的主要编程语言。 在学习Objective-C编程语言时，此教程及参考资料将引导您通过简单实用的方法来学习Objective-C", date: "JUN 18"),
    Update(image: "Certificate1", title: "Nginx", text: "Nginx是HTTP和反向代理服务器，邮件代理服务器，以及Igor Sysoev最初编写的通用TCP/UDP代理服务器。在很长一段时间以来，它一直在许多负载重的俄罗斯网站上运行，包括：Yandex，Mail.Ru，VK和Rambler。 根据Netcraft的说法，Nginx在2017年3月份服务或代理了28.50％的最繁忙的网站。这里有一些成功案例：Netflix，Wordpress.com，FastMail.FM。", date: "JUN 21"),
    Update(image: "Certificate2", title: "Netty", text: "Netty本身是用于快速构建服务端与客户端之间通信协议的框架。Netty在消息处理上使用责任链模式，用户可以轻松方便的对它进行扩展。官方也提供了大量的优秀的扩展。Netty是一个NIO客户端服务器框架，可以快速，轻松地开发网络应用程序，如协议服务器和客户端。 它大大简化和简化了网络编程，如TCP和UDP套接字服务器。", date: "JUN 26"),
    Update(image: "Certificate3", title: "SwiftUI", text: "SwiftUI 是一种非常简单的创新方法，可以利用 Swift 的强大能力在所有苹果设备平台上构建用户界面。通过 SwiftUI，开发者仅使用一组工具和 API 就能为所有苹果设备构建用户界面。SwiftUI 使用易于阅读和编写的声明式 Swift 语法，可与新的 Xcode 设计工具无缝协作，使你的代码和设计完美同步。SwiftUI 自动支持动态类型、黑暗模式、本地化和可访问性，你的 SwiftUI 代码将成为你写过的最强大的 UI 代码。", date: "JUN 30"),
]
